# -*- coding:utf-8 -*-
import socket 
import threading
from time import ctime

"""
16-8. 全双工聊天。修改你刚才的程序，改成全双工，即两个人可以独立地发送和接收消息。
"""
BUFSIZE = 1024
def recv_msg(conn,addr):
    print threading.currentThread().getName()
    while True:
        data = conn.recv(BUFSIZE)
        if not data:
            break
        print "%s:[%s]-%s"% (addr,ctime(),data)
    conn.close()

def send_msg(conn,addr):
    while True:
        data = raw_input("server:>>").strip()
        if not data:
            break
        conn.sendall(data+"\r\n")
    conn.close()

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
s.bind(('127.0.0.1',8888))
s.listen(1)

while True:
    try:
        #主线程
        #通过一个永久循环接受来自客户端的连接,accept会等待并返回一个客户端的连接
        conn,addr = s.accept()
    except:
        raise
    #每个连接都必须创建新线程来处理
    t1 = threading.Thread(target=recv_msg,args=(conn,addr,))
    t1.setDaemon(True)
    t1.start()

    t2 = threading.Thread(target=send_msg,args=(conn,addr,))
    t2.setDaemon(True)
    t2.start()
s.close()